
package org.xml.sax;

/**
 * 封装一般SAX错误或警告。
 *
 *
 * 该类可以包含来自XML解析器或应用程序的基本错误或警告信息：
 * 解析器编写器或应用程序编写器可以对它进行子类化以提供附加功能
 *
 * AX处理程序可能会抛出此异常或从其中分类的任何异常。
 *
 * 如果应用程序需要传递其他类型的异常，
 * 则必须将这些异常包装在SAXException中或从SAXException派生的异常中。
 *
 * 如果解析器或应用程序需要包含有关XML文档中特定位置的信息，则应使用
 * {@link org.xml.sax.SAXParseException SAXParseException} 子类.</p>
 *
 * @since SAX 1.0
 * @author David Megginson
 * @version 2.0.1 (sax2r2)
 * @see org.xml.sax.SAXParseException
 */
public class SAXException extends Exception {

    /**
     * 创建一个新的SAXException
     */
    public SAXException ()
    {
    this.exception = null;
    }


    /**
     * 创建一个新的SAXException。
     *
     * @param message ：错误或警告消息
     */
    public SAXException (String message) {
    super(message);
    this.exception = null;
    }


    /**
     * 创建一个包装现有异常的新SAXException
     *
     * 现有的异常将嵌入到新的异常中，并且其消息将成为SAXException的默认消息。
     *
     * @param e ：要包装在SAXException中的异常
     */
    public SAXException (Exception e)
    {
    this.exception = e;
    }


    /**
     * 从现有的异常中创建一个新的SAXException
     *
     * 现有的异常将被嵌入到新的异常中，但新的异常将有其自己的消息.
     *
     * @param message :详细消息。
     * @param e :要包装在SAXException中的异常。
     */
    public SAXException (String message, Exception e)
    {
    super(message);
    this.exception = e;
    }


    /**
     * 返回此异常的详细消息。
     *
     * 如果存在嵌入式异常，并且SAXException没有自己的详细消息，
     * 则此方法将从嵌入式异常中返回详细消息。
     *
     * @return ：错误或警告消息。
     */
    public String getMessage ()
    {
    String message = super.getMessage();

    if (message == null && exception != null) {
        return exception.getMessage();
    } else {
        return message;
    }
    }


    /**
     * 返回嵌入式异常（如果有的话）
     *
     * @return ：嵌入式异常，如果没有，则返回null。
     */
    public Exception getException ()
    {
    return exception;
    }


    /**
     * 重写为字符串以拾取任何嵌入的异常。
     * @return ：此异常的字符串表示形式。
     */
    public String toString ()
    {
    if (exception != null) {
        return exception.toString();
    } else {
        return super.toString();
    }
    }


    
    //////////////////////////////////////////////////////////////////////
    // 内部状态。
    //////////////////////////////////////////////////////////////////////


    /**
     * @serial 嵌入式异常（如果是隧道），或者为null。
     */
    private Exception exception;

}
